package com.zjy.log.enums;

import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zhangjianyu
 * email: 578547270@qq.com
 * create_time: 2024-10-22 18:45
 * description:
 */
@Getter
public enum LogBusinessType {
    OTHER(0, "其他"),
    INSERT(1, "新增"),
    UPDATE(2, "修改"),
    INSERT_UPDATE(3, "新增-修改"),
    DELETE(4, "删除"),
    GRANT(5, "登录"),
    EXPORT(6, "导出"),
    IMPORT(7, "导入"),
    FORCE(8, "强退"),
    GENERATE_CODE(9, "生成代码"),
    CLEAN(10, "清空数据"),
    ;

    private final static Map<Integer, LogBusinessType> MAP_DATA = new HashMap<>();

    static {
        for (LogBusinessType value : LogBusinessType.values()) {
            MAP_DATA.put(value.getType(), value);
        }
    }

    /**
     * 根据业务代码和状态码获取对应的状态信息
     * 此方法主要用于将给定的业务代码和状态码映射到相应的状态信息字符串
     * 如果没有找到匹配的状态枚举，则返回null
     *
     * @param status 状态码，表示业务场景中的具体状态
     * @return 如果找到匹配的状态枚举，则返回对应的状态信息字符串；否则返回null
     */
    public static String of(Integer status) {
        LogBusinessType type = ofEnum(status);
        if (type != null) {
            return type.getMsg();
        }
        return null;
    }

    /**
     * 根据业务代码和状态码获取对应的状态枚举
     *
     * @param status 状态码，用于在特定业务场景下识别特定的状态
     * @return 对应的状态枚举，如果找不到对应的枚举则返回null
     */
    public static LogBusinessType ofEnum(Integer status) {
        return MAP_DATA.get(status);
    }

    private Integer type;

    private String msg;

    LogBusinessType(Integer type, String msg) {
        this.type = type;
        this.msg = msg;
    }
}
